package com.common.Interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
* Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器，只是省去了 xml 配置部分。并没有本质的不同，都是通过实现 HandlerInterceptor 中几个方法实现。几个方法的作用一一如下。
    preHandle
    进入 Habdler 方法之前执行，一般用于身份认证授权等。
    postHandle
    进入 Handler 方法之后返回 modelAndView 之前执行，一般用于塞入公共模型数据等。
    afterCompletion
    最后处理，一般用于日志收集，统一后续处理等。
* */
public class DemoInterceptor implements HandlerInterceptor {

    /**
     * 请求方法执行之前
     * 返回true则通过
     *
     * @param request
     * @param response
     * @param handler
     * @return
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        StringBuffer requestURL = request.getRequestURL();
        System.out.println("preHandle请求URL：" + requestURL.toString());
        return true;
    }

    /**
     * 返回modelAndView之前执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle返回modelAndView之前");
    }

    /**
     * 执行Handler完成执行此方法
     * @param request
     * @param response
     * @param handler
     * @param ex
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion执行完请求方法完全返回之后");
    }

}
